class BubbleSort {
  sort (array) {
    let tmp = 0;
    // 记录最后一次交换的位置
    let lastExchangeIndex = 0;
    // 无序数列的边界，每次比较只需要比到这里为止
    let sortBorder = array.length - 1;
    for (let i = 0; i < array.length; i++) {
      // 有序标记，每一轮的初始是true
      let isSorted = true;
      for (let j = 0; j < sortBorder; j++) {
        if (array[j] > array[j + 1]) {
          tmp = array[j];
          array[j] = array[j + 1];
          array[j + 1] = tmp;
          //有元素交换不是有序，标记为false
          isSorted = false;
          // 把无需数列的边界更新为最后一次交换元素的位置
          lastExchangeIndex = j;
        }
      }
      sortBorder = lastExchangeIndex;
      if (isSorted) {
        break;
      }
    }
  }
}

let array = [3, 4, 2, 1, 5, 6, 7, 8];
let bubbleSort = new BubbleSort();
bubbleSort.sort(array)
console.log(array);